<!doctype html>
<!--
    @license
    Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
    This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
    The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
    The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
    Code distributed by Google as part of the polymer project is also
    subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
  <head>
    <title>Custom Elements: attributes</title>
    <script src="../../tools/htmltest.js"></script>
    <script src="../../tools/chai/chai.js"></script>
    <script src="../../../src/CustomElements/CustomElements.js"></script>
  </head>
  <body>
    <script>
      var prototype = Object.create(HTMLElement.prototype);
      prototype.removeAttributeOk = false;
      prototype.setAttributeOk = false;
      prototype.attributeChangedOk = false;
      prototype.removeAttribute = function(name) {
        this.removeAttributeOk = true;
        return HTMLElement.prototype.removeAttribute.call(this, name);
      };
      prototype.setAttribute = function(name, value) {
        this.setAttributeOk = true;
        HTMLElement.prototype.setAttribute.call(this, name, value);
      };
      prototype.attributeChangedCallback = function(name, oldValue, newValue) {
        this.attributeChangedOk = (name === 'squid') && (oldValue === null)
            && (newValue === 'tentacles');
      };
      document.registerElement('x-foo', {prototype: prototype});

      addEventListener('WebComponentsReady', function() {
        var xfoo = document.createElement('x-foo');
        chai.assert.isFalse(xfoo.removeAttributeOk);
        chai.assert.isFalse(xfoo.setAttributeOk);
        chai.assert.isFalse(xfoo.attributeChangedOk);
        xfoo.setAttribute('Squid', 'tentacles');
        chai.assert.isTrue(xfoo.setAttributeOk);
        chai.assert.isTrue(xfoo.attributeChangedOk);
        xfoo.attributeChangedOk = false;
        xfoo.removeAttribute('squid');
        chai.assert.isTrue(xfoo.removeAttributeOk);
        chai.assert.isTrue(xfoo.setAttributeOk);
        done();
      });
    </script>
  </body>
</html>
